package com.system.cacheClient.client;

import com.system.cacheClient.enums.CacheType;
import com.system.cacheClient.common.CacheR;

import java.util.function.Supplier;

/**
 * 缓存客户端接口
 * 提供统一的缓存操作方法，支持多级缓存
 */
public interface CacheClient {
    
    /**
     * 获取缓存数据
     * @param cacheType 缓存类型
     * @param key 缓存键
     * @param <T> 数据类型
     * @return 缓存数据
     */
    <T> CacheR<T> get(CacheType cacheType, String key);
    
    /**
     * 设置缓存数据
     * @param cacheType 缓存类型
     * @param key 缓存键
     * @param data 缓存数据
     * @param <T> 数据类型
     * @return 操作结果
     */
    <T> CacheR<Boolean> set(CacheType cacheType, String key, T data);
    
    /**
     * 删除缓存数据
     * @param cacheType 缓存类型
     * @param key 缓存键
     * @return 操作结果
     */
    CacheR<Boolean> delete(CacheType cacheType, String key);
    
    /**
     * 自动判断类型的设置缓存数据方法
     * @param key 缓存键
     * @param data 缓存数据
     * @param <T> 数据类型
     * @return 操作结果
     */
    <T> CacheR<Boolean> set(String key, T data);
    
    /**
     * 获取缓存数据，如果缓存不存在则执行回调函数获取数据
     * @param cacheType 缓存类型
     * @param key 缓存键
     * @param supplier 回调函数，用于获取数据
     * @param <T> 数据类型
     * @return 缓存数据或回调函数返回的数据
     */
    <T> CacheR<T> get(CacheType cacheType, String key, Supplier<T> supplier);
}